﻿using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;

namespace StudentSynchronization.Daemon
{
    public class WinProcess
    {
        [DllImport("user32.dll")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);
        [DllImport("user32.dll")]
        private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
        [DllImport("user32.dll")]
        private static extern bool IsIconic(IntPtr hWnd);
        // 消息函数
        [DllImport("user32.dll", EntryPoint = "PostMessageA")]
        public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

        [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(string strclassName, string strWindowName);
        [DllImportAttribute("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

        public const int WM_SYSCOMMAND = 0x0112;
        public const int SC_MAXIMIZE = 0xF030;

        public void SetForm(string exeName,string path,string name)
        {
            Process[] processes = Process.GetProcessesByName(exeName);

            if (processes.Length > 0)
            {
                IntPtr hWnd = processes[0].MainWindowHandle;

                if (IsIconic(hWnd))
                    ShowWindowAsync(hWnd, 9);// 9就是SW_RESTORE标志，表示还原窗体
                                             //SendMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
                SetForegroundWindow(hWnd);
            }
            else
            {
                Process fireProcess = new Process();
                try
                {
                    fireProcess.StartInfo.Arguments = "";
                    fireProcess.StartInfo.UseShellExecute = true;
                    fireProcess.StartInfo.CreateNoWindow = false;
                    fireProcess.StartInfo.WorkingDirectory = path;
                    fireProcess.StartInfo.FileName =name;
                    fireProcess.Start();
                }
                catch (Exception error)
                {
                    File.AppendAllText("log.txt",error.Message + "__" + DateTime.Now);
                }
                finally
                {
                    fireProcess.Dispose();
                }
            }
        }
    }
}
